package main
import "fmt"
import "crypto/rand"
import "math/big"
import "strconv"
func main() {
	//数据类型
	//基本数据类型,数值,字符,布尔,字符串
	//复制数据类型,指针,数组,结构体,函数,管道,函数,切片,接口,map
	var a  = 99999888
	fmt.Printf("格式化",a)
	//创建一个随机数
    n, _ := rand.Int(rand.Reader, big.NewInt(100)) // 生成 0 到 99 之间的随机整数
 
	fmt.Println(n)
	// //定义浮点类型的数据,浮点数可能有精度问题,最好使用float64
	// var b float32 = 3.0000000014
	// var c float64 = 3.0000000014
	// var d  = 3.0000000014
	// fmt.Println(b,c,d)
	// fmt.Printf(b)

	// var n1 int = 18
	// var s1 string = strconv.FormatInt(int64(n1),10)  //参数：第一个参数必须转为int64类型 ，第二个参数指定字面值的进制形式为十进制
	// fmt.Printf("s1对应的类型是：%T ，s1 = %q \n",s1, s1)
	// var n2 float64 = 4.29
	// var s2 string = strconv.FormatFloat(n2,'f',9,64)
	// //第二个参数：'f'（-ddd.dddd）  第三个参数：9 保留小数点后面9位  第四个参数：表示这个小数是float64类型
	// fmt.Printf("s2对应的类型是：%T ，s2 = %q \n",s2, s2)
	// var n3 bool = true
	// var s3 string = strconv.FormatBool(n3)
	// fmt.Printf("s3对应的类型是：%T ，s3 = %q \n",s3, s3)

	  //string-->bool
	  var s1 string = "true"
	  var b bool
	  //ParseBool这个函数的返回值有两个：(value bool, err error)
	  //value就是我们得到的布尔类型的数据，err出现的错误
	  //我们只关注得到的布尔类型的数据，err可以用_直接忽略
	  b , _ = strconv.ParseBool(s1)
	  fmt.Printf("b的类型是：%T,b=%v \n",b,b)
	  //string---》int64
	  var s2 string = "19"
	  var num1 int64
	  num1,_ = strconv.ParseInt(s2,10,64)
	  fmt.Printf("num1的类型是：%T,num1=%v \n",num1,num1)
	  //string-->float32/float64
	  var s3 string = "3.14"
	  var f1 float64
	  f1,_ = strconv.ParseFloat(s3,64)
	  fmt.Printf("f1的类型是：%T,f1=%v \n",f1,f1)
	  //注意：string向基本数据类型转换的时候，一定要确保string类型能够转成有效的数据类型，否则最后得到的结果就是按照对应类型的默认值输出
	  var s4 string = "golang"
	  var b1 bool
	  b1 , _ = strconv.ParseBool(s4)
	  fmt.Printf("b1的类型是：%T,b1=%v \n",b1,b1)
	  var s5 string = "golang"
	  var num2 int64
	  num2,_ = strconv.ParseInt(s5,10,64)
	  fmt.Printf("num2的类型是：%T,num2=%v \n",num2,num2)
}